package com.um.weixin.mini.service;

import cn.binarywang.wx.miniapp.bean.WxMaJscode2SessionResult;
import cn.binarywang.wx.miniapp.bean.WxMaPhoneNumberInfo;
import cn.binarywang.wx.miniapp.bean.WxMaUserInfo;
import me.chanjar.weixin.common.error.WxErrorException;

/**
 * @Title
 * @Description
 * @Author renjunwei
 * @Date 2023/5/31 17:27
 */
public interface WxMiniUserService {

    /**
     * 获取登录后的session信息.
     *
     * @param appId 小程序id
     * @param jsCode 登录时获取的 code
     * @return .
     * @throws WxErrorException .
     */
    WxMaJscode2SessionResult getSessionInfo(String appId, String jsCode) throws WxErrorException;

    /**
     * 获取登录后的session信息.
     *
     * @param jsCode 登录时获取的 code
     * @return .
     * @throws WxErrorException .
     */
    WxMaJscode2SessionResult getSessionInfo(String jsCode) throws WxErrorException;

    /**
     * 解密用户敏感数据.
     *
     * @param sessionKey    会话密钥
     * @param encryptedData 消息密文
     * @param ivStr         加密算法的初始向量
     */
    WxMaUserInfo getUserInfo(String sessionKey, String encryptedData, String ivStr);

    /**
     * 解密用户手机号信息.
     *
     * @param sessionKey    会话密钥
     * @param encryptedData 消息密文
     * @param ivStr         加密算法的初始向量
     * @return .
     * @deprecated 请使用替代方法 {@link #getPhoneNoInfo(String)}
     */
    @Deprecated
    WxMaPhoneNumberInfo getPhoneNoInfo(String sessionKey, String encryptedData, String ivStr);


    /**
     * 获取手机号信息,基础库:2.21.2及以上
     *
     * @param code 动态令牌
     * @return .
     * @throws WxErrorException .
     */
    WxMaPhoneNumberInfo getPhoneNoInfo(String code) throws WxErrorException;
}
